/**
 * 二分查找
 *  算法思想：
 *     - 基础条件是数据必须是 有序的（大小顺序排列好了）
 *     1: 设置三个指针，分别指向 low mid height
 *     2: 求得数据的中间数 (height - low)%2
 *     3: 比较 中间数和查找值的大小
 *          等于，返回结果
 *          小于，将 height = mid - 1
 *          大于，将 low = mid + 1
 *     4: 将得到后的新指针带入，继续计算，
 *          一直到 找到结果，返回结果
 *          或者 height < low  || low > height 表示查找失败
 * 
 *  以上其实采用了 递归 的思想
 */    

 function halfSearch (low, height, list, val) {
    if (low > height) return -1
    let mid = Math.floor((height + low)/2)
    let midData = list[mid]
    if (midData === val) {
        return mid
    }
    if (val > midData) {
        low = mid + 1
    }
    if (val < midData) {
        height = mid - 1
    }
    return halfSearch(low, height, list, val)
 }

 const data = [2, 4, 6, 8, 10, 12, 24]
 console.log(halfSearch(0, data.length - 1, data, 20))